package com.example.contactos;

import android.app.LauncherActivity.ListItem;
import android.test.ActivityInstrumentationTestCase2;
import android.widget.EditText;
import android.widget.ListView;

import com.robotium.solo.Solo;


public class MainActivity_Test extends ActivityInstrumentationTestCase2<MainActivity> {

	private Solo solo;
	private Pessoa pessoa1;
	private Pessoa pessoa2;
	private Agenda agenda;

	public MainActivity_Test() {
		super(MainActivity.class);
	}

	@Override
	protected void setUp() throws Exception {		


		agenda = Agenda.getInstance();
		agenda.clear();

		pessoa1 = new Pessoa("teste1", 123);
		agenda.adicionar(pessoa1);
		pessoa2 = new Pessoa("teste2", 456);
		agenda.adicionar(pessoa2);		
		
		super.setUp();		
		solo = new Solo(getInstrumentation(), getActivity());
	}

	@Override
	protected void tearDown() throws Exception {
		solo.finishOpenedActivities();
		super.tearDown();
	}

	//	public void test2ListarContactosExistentes() {		
	//		String agendaToString = getActivity().getAgenda().toString();
	//
	//		assertTrue(agendaToString.contains(pessoa1.toString()));
	//		assertTrue(agendaToString.contains(pessoa2.toString()));
	//
	//		// --------------------
	//
	//		TextView contactosTextView = (TextView) solo.getView(R.id.textView_contactos);			
	//		getActivity().runOnUiThread(new Runnable() {
	//			@Override
	//			public void run() {
	//				getActivity().refreshTextViewContactos();
	//			}
	//		});		
	//		getInstrumentation().waitForIdleSync();		
	//
	//		String contactosTextViewToString = contactosTextView.getText().toString();
	//
	//		assertEquals(agendaToString, contactosTextViewToString);
	//	}
	//
	//	public void test1AdicionarNovoContacto() {
	//
	//		ArrayList<Pessoa> contactos = getActivity().getAgenda().getContactos();
	//
	//		assertTrue(contactos.contains(pessoa1));
	//		assertTrue(contactos.contains(pessoa2));
	//
	//		// ----------
	//
	//		solo.clickOnActionBarItem(R.id.new_contact);
	//
	//		solo.assertCurrentActivity("DetalhesActivity is not the current activity.", DetalhesActivity.class);
	//
	//		Pessoa pessoa3 = new Pessoa("teste3", 789);
	//
	//		EditText editText_nome = (EditText) solo.getView(R.id.editText_nome);
	//		solo.enterText(editText_nome, pessoa3.getNome());
	//		EditText editText_bi = (EditText) solo.getView(R.id.editText_bi);
	//		solo.enterText(editText_bi, "" + pessoa3.getBi());
	//
	//		solo.clickOnButton(getActivity().getResources().getString(R.string.ok));
	//
	//		solo.assertCurrentActivity("MainActivity is not the current activity.", MainActivity.class);
	//
	//		assertTrue(contactos.contains(pessoa3));
	//
	//		TextView contactosTextView = (TextView) solo.getView(R.id.textView_contactos);	
	//		String contactosTextViewToString = contactosTextView.getText().toString();
	//
	//		assertTrue(contactosTextViewToString.contains(pessoa3.toString()));
	//	}
	//
	//	public void test3PesquisarContactosPorParteDoNome() {
	//		ArrayList<Pessoa> pesquisar = getActivity().getAgenda().pesquisar("teste");
	//
	//		assertEquals(2, pesquisar.size());
	//		assertTrue(pesquisar.contains(pessoa1));
	//		assertTrue(pesquisar.contains(pessoa2));
	//
	//		ArrayList<Pessoa> pesquisarFalhado = getActivity().getAgenda().pesquisar("testeFalhado");
	//
	//		assertEquals(0, pesquisarFalhado.size());
	//
	//		// -----		
	//
	//		solo.clickOnActionBarItem(R.id.search_contact);
	//
	//		solo.assertCurrentActivity("PesquisaActivity is not the current activity.", PesquisaActivity.class);
	//
	//		EditText editText_pesquisa = (EditText) solo.getView(R.id.editText_pesquisa);
	//		solo.enterText(editText_pesquisa, "teste");
	//
	//		solo.clickOnButton(getActivity().getResources().getString(R.string.ok));
	//
	//		//		solo.clearEditText(editText_pesquisa);
	//		//		for (Pessoa pessoa : pesquisar) {
	//		//			assertTrue("Could not find " + pessoa.getNome() + ".", solo.searchText(pessoa.getNome(), 1, true, true));
	//		//		}
	//		//		
	//		ListView listView_pesquisa = (ListView) solo.getView(R.id.listView_pesquisa);
	//		
	//		getInstrumentation().waitForIdleSync();	
	//
	//		assertEquals(pesquisar.size(), listView_pesquisa.getCount());
	//
	//		for (int i = 0; i < listView_pesquisa.getCount(); i++) {
	//			assertEquals(pesquisar.get(i), listView_pesquisa.getItemAtPosition(i));
	//		}
	//
	//
	//		solo.clearEditText(editText_pesquisa);		
	//		
	//		solo.enterText(editText_pesquisa, "testeFalhado");		
	//		
	//		solo.clickOnButton(getActivity().getResources().getString(R.string.ok));
	//		
	//		getInstrumentation().waitForIdleSync();			
	//
	//		assertEquals(0, listView_pesquisa.getCount());		
	//	}

	public void test4Editar() {
		ListView listView_contactos = (ListView) solo.getView(R.id.listView_contactos);

		Pessoa pessoaLinha1 = (Pessoa) listView_contactos.getItemAtPosition(0);
		assertNotNull(pessoaLinha1);


		String nomeOriginal = pessoaLinha1.getNome();
		int biOriginal = pessoaLinha1.getBi();
		
		solo.clickInList(0);

		getInstrumentation().waitForIdleSync();			
		solo.assertCurrentActivity("DetalhesActivity is not the current activity.", DetalhesActivity.class);

		EditText editText_nome = (EditText) solo.getView(R.id.editText_nome);
		assertEquals(nomeOriginal, editText_nome.getText().toString());

		EditText editText_bi = (EditText) solo.getView(R.id.editText_bi);
		assertEquals(""+biOriginal, editText_bi.getText().toString());

		String nomeEditado = "teste3";
		int biEditado = 789;
		
		solo.clearEditText(editText_nome);	
		solo.enterText(editText_nome, nomeEditado);
		solo.clearEditText(editText_bi);	
		solo.enterText(editText_bi, ""+biEditado);

		solo.clickOnButton(getActivity().getResources().getString(R.string.ok));

		getInstrumentation().waitForIdleSync();			
		solo.assertCurrentActivity("MainActivity is not the current activity.", MainActivity.class);

		listView_contactos = (ListView) solo.getView(R.id.listView_contactos);

		assertTrue(solo.searchText(nomeEditado));
		assertTrue(solo.searchText(""+biEditado));

		assertFalse(solo.searchText(nomeOriginal));
		assertFalse(solo.searchText(""+biOriginal));
	}
	
	public void test5Remover() {
		ListView listView_contactos = (ListView) solo.getView(R.id.listView_contactos);

		Pessoa pessoaLinha1 = (Pessoa) listView_contactos.getItemAtPosition(0);
		assertNotNull(pessoaLinha1);
		Pessoa pessoaLinha2 = (Pessoa) listView_contactos.getItemAtPosition(1);
		assertNotNull(pessoaLinha2);

		String nomeOriginal = pessoaLinha1.getNome();
		int biOriginal = pessoaLinha1.getBi();
		
		assertTrue(solo.searchText(nomeOriginal));
		assertTrue(solo.searchText(""+biOriginal));
		
		solo.clickLongInList(0);

		getInstrumentation().waitForIdleSync();	
		
		assertTrue(solo.searchText(getActivity().getResources().getString(R.string.removerDialogText)));
		
		solo.clickOnButton(getActivity().getResources().getString(R.string.ok));
		
		getInstrumentation().waitForIdleSync();			
		
		assertFalse(solo.searchText(nomeOriginal));
		assertFalse(solo.searchText(""+biOriginal));
		
		assertTrue(solo.searchText(pessoaLinha2.getNome()));
		assertTrue(solo.searchText(""+pessoaLinha2.getBi()));
		
		// ---
		
		solo.clickLongInList(0);
		
		assertTrue(solo.searchText(getActivity().getResources().getString(R.string.removerDialogText)));
		
		solo.clickOnButton(getActivity().getResources().getString(R.string.cancelar));
		
		getInstrumentation().waitForIdleSync();			

		assertTrue(solo.searchText(pessoaLinha2.getNome()));
		assertTrue(solo.searchText(""+pessoaLinha2.getBi()));
		
		
		
		
	}
}
